// This file is part of OpenMeca, an easy software to do mechanical simulation.
//
// Author(s)    :  - Damien ANDRE  <openmeca@gmail.com>
//
// Copyright (C) 2012 Damien ANDRE
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program.  If not, see <http://www.gnu.org/licenses/>.


#ifndef OpenMeca_Core_SelectionManager_hpp
#define OpenMeca_Core_SelectionManager_hpp

#include <QObject>

#include "OpenMeca/Core/Singleton.hpp"
#include "OpenMeca/Core/UserItem.hpp"
#include "OpenMeca/Util/Color.hpp"

namespace OpenMeca
{
  namespace Core
  {


    class SelectionManager :  public QObject, public Singleton<SelectionManager>
    {

      Q_OBJECT
      friend class Singleton<SelectionManager>;

    public:    
      void SetItemSelected(UserItem&);
      void SetDrawableItemSelected(int);
      void SetNoItemSelected();
      bool IsItemSelected();
      UserItem& GetItemSelected();

      const Util::Color& GetSelectedColor() const;
    
    signals:
      void ItemSelected(Core::UserItem&);

    private:
      SelectionManager();
      virtual ~SelectionManager();
      UserItem& GetUserItem();
      SelectionManager(const SelectionManager&);            //Not Allowed    
      SelectionManager& operator=(const SelectionManager&); //Not Allowed

    private:
      UserItem* itemSelected_;
      Util::Color selectedColor_;
            
    };

  }
}
 
#endif
